<?php

/**
 * Je uzlem ve stromu
 * @author Michal Hantl
 * @version 0.0.1
 */
 
abstract class cNode 
{

	public $cms;
	public $parent = null;
	
	public $name = null;
	public $string_id = null;
	public $id = null;
	
	 
	function __construct(cCms $cms)
	{
		$this->cms = $cms;

	}

	/* =================================================== */	
	/* ----------------- Abstraktní metody --------------- */	
	/* =================================================== */	

	/**
	 * Vypíše výstup daného typu v pohledu $view
	 */
	abstract function view(cView $view);

	/**
	 * Znovu načte datový typ
	 */
	abstract function refresh();

	/**
	 * Zavolá uložení (někam)
	 */
	function save($startTransaction=true)
	{
	}
	
	abstract function getTranslated($path);	
	
	abstract function numSubNodes($node);

	abstract function hasChildren();

	/**
	 *	Zjistí, je-li položka vlastněna $user-em
	 */
	//abstract function isOwndedBy($user);
	
	/**
	 * vrací akce možné aplikovat nodu. (rename, recycle, delete, cut, copy, paste...)
	 */
	//abstract function listActions();
	
	/**
	 * Vrátí způsoby seřazení (například podle výrobce, ceny..)
	 */
	//abstract function getSortTypes();
	
	/**
	 * Vrac� zp�soby zobrazen� (t�eba full, perex, list..)
	 */
	//abstract function getViewTypes();
	
	/**
	 * Vrátí XML s filtry (pouze mé, pouze od výrobce ABC, pouze na skladě..)
	 */
	//abstract function getFilters();
	
	/**
	 * Vráti doctypes, pro jake jsou nadefinovany
	 */
	//abstract function getAvilableDoctypes();


	/* ====================================================== */
	/* -------------------- Práce s node -------------------- */
	/* ====================================================== */
	 
	
	/* ==== relativní gety ==== */

	abstract function getPrior();
	abstract function getNext();
	abstract function getParent();
	abstract function getFirst();
	abstract function getLast();

	/** Vrátí přímé potomky */
	abstract function getChildren($view, &$sender=null);
	abstract function getChildrenCount($view);

	/** Vrátí všechny potomky */
	abstract function getSubNodes($view);
	abstract function getsubnodesCount($view);

	
	/** Vrátí přímé potomky podle $where */
	abstract function getChildrenWhere($where, cView $view);
	
	/** Vrátí všechny potomky podle $where */
	abstract function getSubNodesWhere($where, cView $view);
	
	/////////////////////////////////////////////////////////
	/* ----------------- POST HANDLING ------------------- */	
	
	abstract function handlePost($post, cView $view);
	
}

?>